草庐IT

c - WaitForMultipleObjects 堆栈

全部标签

c++ - 为什么在堆上迭代一个大数组比在堆栈上迭代相同大小的数组更快?

我正在分配2个相同大小的数组,一个在堆栈上,一个在堆上,然后用简单的赋值遍历它们。可执行文件被编译为主线程堆栈分配40mb。此代码仅经过测试可在带有/STACK:41943040链接器标记的vc++中编译。#include"stdafx.h"#include#include#include#include#includeusingnamespacestd;size_tstackavail(){staticunsignedStackPtr;//topofstackptr__asmmov[StackPtr],esp//movpointertotopofstackstaticMEMORY_B

c++ - 将堆栈传递给函数

所以我在玩弄堆栈,并且在我的主函数中填充了一个,但现在我想将它传递给我的其他函数以便我可以遍历它。我不确定要将哪种数据类型放入原型(prototype)中以便它接受它。建议?这是我拥有的:main.cpp#includeusingnamespacestd;#include"stack.h"voiddisplayStack(char&stackRef);intmain(){Stackstack;stack.push('a');stack.push('b');stack.push('c');return0;};voiddisplayStack(charstarRef){//CannotGe

c++ - 放置在 unordered_map 中的项目是存储在堆栈还是堆中?

假设我有以下类(class):classMyOtherClass{std::unordered_map>_xy;voidputObject(intx,inty,MyClass*obj);voidcontainsXkey(intx){boolfound=false;std::unordered_map>::const_iteratorindex=_xy.find(x);if(index=_xy.end(){found=false;}else{found=true;}returnfound;}}假设我想编写一个函数将MyClass放置在坐标(2,3)处,那么我会这样做:voidputObj

c++ - 为 WaitforMultipleObjects 增加 MAXIMUM_WAIT_OBJECTS

要等待超过MAXIMUM_WAIT_OBJECTS的对象,最简单的方法是什么?MSDN列出了这个:创建一个线程等待MAXIMUM_WAIT_OBJECTS句柄,然后等待该线程和其他句柄。使用此技术将句柄分成MAXIMUM_WAIT_OBJECTS组。调用RegisterWaitForSingleObject等待每个句柄。线程池中的等待线程等待MAXIMUM_WAIT_OBJECTS注册对象,并在对象发出信号或超时间隔到期后分配工作线程。但他们都不是很清楚。这种情况将等待超过一千个线程句柄的数组。 最佳答案 如果您发现自己在等待大量对

c++ - WaitForMultipleObjects 和 boost::asio 在多个 windows::basic_handle 上有什么区别?

我有一个HANDLE列表,由许多不同的IO设备控制。之间的(性能)差异是什么:在所有这些句柄上调用WaitForMultipleObjectsasync_readonboost::windows::basic_handle'saroundallthesehandlesWaitForMultipleObjects是O(n)时间复杂度吗?n个句柄?您可以以某种方式在windows::basic_handle上调用async_read对吗?或者这个假设是错误的?如果我在多个线程中调用同一个IO设备上的运行,处理调用是否会在这些线程之间平衡?这将是使用asio的主要好处。

c++ - 将大 vector 存储在堆栈中是个坏主意吗?

我一直在研究一堆图像处理程序..没什么特别的,主要是快速而肮脏的实验。图像数据存储在堆栈上声明的vector中(当我不需要传递数据时,我尽量避免使用指针)。我注意到尽管进行了无数次调试和单步执行,但我的某些函数的行为一直很奇怪。有时调试器会给我一个错误,它无法评估某个变量等等。事情通常是没有意义的,过去的经验告诉我,当这种情况发生时,这意味着发生了某种溢出或内存损坏。第一个想到的是,这可能是因为我将大量图像数据存储到vector中。但是,我的印象是vector将它们的实际数据存储在堆中,因此我认为在堆栈中放置一些这样的大vector不会有什么坏处。我这样想错了吗?我应该分配我的vect

c++ - 在不指定名称的情况下声明堆栈变量并获取指针

众所周知,用new定义一个堆变量得到指针而不指定名称:Var*p=newVar("name",1);但是我必须稍后在程序中使用deletep清除p指向的变量。我想声明一个堆栈变量,以便在函数退出后自动清除它,但我只想获取指针,以及以下内容:Varv("name",1);Var*p=&v;非常乏味,永远不会引用说明符v。我可以声明一个堆栈类实例并在不指定其名称的情况下获取它的指针吗? 最佳答案 这里隐藏着两个问题。第一个是:Var*p=newVar("name",1);ButIhavetoclearthevariablepointed

c++ - 在 Linux 上用 C++ 实现线程安全的通用堆栈

在最近的一次采访中,我被要求在Linux机器上用C++实现一个线程安全的通用(即基于模板的)堆栈。我很快想到了以下(可能有编译错误)。我打通了。面试官可能喜欢这个实现中的某些东西。也许是设计部分:)以下是此实现可能存在的一些问题:-1.指示上溢/下溢的实现不正确。没有溢出处理,因为我使用STLvector作为底层数据结构。应该有这样的处理吗?此外,下溢(在Pop()中)产生false作为返回值。是否应该通过抛出异常来完成?2.PopElem例程的实现。下面的实现是否正确?3.没有真正使用top元素。4.作者和读者线程开始之间更好的时机。请提出任何意见/建议/改进。谢谢。//实现线程安全

c++ - printf 使用堆栈?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:confusedaboutprintf()thatcontainsprefixandpostfixoperators.我遇到了一段包含以下片段的代码,intmain(){intc=100;printf("\n%d\t%d\n",c,c++);return0;}我预计输出为100和101但我得到的输出为101100谁能帮我知道为什么?

c++ - "delete"与堆栈对象的行为是什么?

这个问题在这里已经有了答案:Isitpossibletodeleteanon-newobject?(4个答案)关闭4年前。intmain(){Class_Namet;Class_Name*p=&t;deletep;return0;}这段代码在调用2个析构函数的情况下执行得很好吗?delete如何处理堆栈对象?行为是否未定义?